package com.pig4cloud.pigx.contract.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 合约模块仓位枚举
 *
 * @date 2022/8/16 19:21
 */
public enum ContractPositionEnum {
	;

	/**
	 * 仓位模式（0逐仓、1全仓）
	 */
	@Getter
	@AllArgsConstructor
	public enum Mode {
		/**
		 * 0 逐仓
		 */
		ISOLATED("逐仓", "0"),
		/**
		 * 1 全仓
		 */
		FULL("全仓", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Mode item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Mode item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 保证金率检查状态（0正常、1已发送邮件）
	 */
	@Getter
	@AllArgsConstructor
	public enum MarginCheckStatus {
		/**
		 * 0 正常
		 */
		NORMAL("正常", "0"),
		/**
		 * 1 已发送邮件
		 */
		BEEN_SENT("已发送邮件", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (MarginCheckStatus item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (MarginCheckStatus item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 仓位状态（-1空仓位、0持仓中、1部分平仓、2全部平仓、3强平中、4已强平）
	 */
	@Getter
	@AllArgsConstructor
	public enum Status {
		/**
		 * -1 空仓位
		 */
		NONE("空仓位", "-1"),
		/**
		 * 0 持仓中
		 */
		OPEN("持仓中", "0"),
		/**
		 * 1 部分平仓
		 */
		PARTIAL_CLOSE("部分平仓", "1"),
		/**
		 * 2 全部平仓
		 */
		CLOSE("全部平仓", "2"),
		/**
		 * 3 强平中
		 */
		LIQUIDATING("强平中", "3"),
		/**
		 * 4 已强平
		 */
		LIQUIDATE("已强平", "4");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Status item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Status item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}
}
